﻿// CMakeList.cpp: 定义应用程序的入口点。
//

#include "CMakeList.h"
#include <list>

using namespace std;

int main()
{
	// list容器就是双向链表，插入和删除时间复杂度O(n)，插入删除的效率较vecter和deque要高
	// list不能随机存取元素，所以不支持at.(pos)函数和[]操作符
	list<int> lst;
	lst.push_back(10);  // 在尾部插入一个元素，类似于尾插法
	lst.push_front(20);  // 头部插入，类似于头插法

#if 0
	/*list容器的基本使用*/
	// 构造一个迭代器
	list<int>::iterator it;
	for (it = lst.begin();it != lst.end();it++)
	{
		cout << *it << " ";
	}
	cout << endl;

	//删除最后一个元素
	/*lst.pop_back();
	for (it = lst.begin();it != lst.end();it++)
	{
		cout << *it << " ";
	}
	cout << endl;*/

	/*lst.pop_front();
	for (it = lst.begin();it != lst.end();it++)
	{
		cout << *it << " ";
	}
	cout << endl;*/


	// 返回第一个结点
	int x = lst.front();
	cout << "x=" << x<<endl;

	x = lst.front();  // list是可遍历的
	cout << "x=" << x << endl;

	// 返回最后一个元素
	int y = lst.back();
	cout << "y=" << y<< endl;

	lst.front() = 100;  // 将第一个结点赋值为100
	lst.back() = 999; // 将最后一个结点赋值为999
	for (it = lst.begin();it != lst.end();it++)
	{
		cout << *it << " ";
	}
	cout << endl;
#endif

	lst.push_back(30);
	lst.push_back(40);
	/*list容器的反向迭代器  为什么支持反向迭代器？因为是双向链表*/
	list<int>::reverse_iterator it1;
	for (it1 = lst.rbegin();it1 != lst.rend();it1++)   // 往前遍历 20 10 30 40
	{
		cout << *it1 << " ";
	}
	cout << endl;

	list<int> lst2(3, 5);  // 构造对象的时候将容器中的元素初始化为3个5
	//list<int> lst3(lst.begin() + 1, lst.begin() + 2);  /////<不支持加n操作
	list<int>::iterator beg = lst.begin();
	beg++;
	list<int>::iterator end = lst.begin();
	end++;
	end++;
	end++;
	list<int> lst3(beg, end);  // 是左闭右开

	list<int> lst4(lst);  // 拷贝构造函数

	list<int>::iterator it3;
	for (it3 = lst4.begin();it3 != lst4.end();it3++)
	{
		cout << *it3 << " ";
	}
	cout << endl;




	return 0;
}
